#include<stdio.h>

#include<ctype.h>
#include<conio.h>
#include <dirent.h>
#include <time.h>

#include "structure_case.h"
#include "graphique.h"
#include "profil.h"
#include "utilisateur.h"


int verif_remplissage_complet_grille(grille tab[9][9],int niveau)
{
    int i,j;
    for(i=0;i<niveau;i++)
    {
        for(j=0;j<niveau;j++)
        {
        if(tab[i][j].type==0)
          {
              if(tab[i][j].chiffre==0)
              return 0;
          }
        }
    }
    return 1;
}

void afficher_avatar(utilisateur u)
{
    FILE *f=NULL;
        char chemin[]="./avatar/";
        int i=0;
        char titre[62]="";
        if((u).avatar==1){strcat(chemin,"1");}
        if((u).avatar==2){strcat(chemin,"2");}
        if((u).avatar==3){strcat(chemin,"3");}
        strcat(chemin,".txt");
        f=fopen(chemin, "r");
        if(f!=NULL)
        {
        color_console(12, 14);
        while(fgets(titre, 62, f))
        {
            move_cursor(32, 13+i);
            printf("%s", titre);
            i++;
        }
        fclose(f);
        move_cursor(34,i+13);
        color_console(15,0);
        }
        else
        {
            printf("ERREUR AVATAR");
        }


}

int taille(int niveau)
{
    int taille;
    switch(niveau)
    {
        case(5) :
        {
            taille=5;
            break;
        }
        case(6) :
        {
            taille=6;
            break;
        }

        case(7) :
        {
            taille=7;
            break;
        }

        case(8) :
        {
            taille=8;
            break;
        }

        default :
        {
            taille=5;
            break;
        }
    }
    return taille;
}

void  hasard_nom_fichier(char chemin[],char* nom_fichier)
{
    DIR * rep = opendir(chemin);
    char tab_fichier[100][25];
    int i=0,j;
    srand(time(NULL));
    if (rep != NULL)
    {
        struct dirent * ent;
        while ((ent = readdir(rep)) != NULL)
        {
            if((strcmp(ent->d_name,".")!=0)&&(strcmp(ent->d_name,"..")!=0))
            {
                strcpy(tab_fichier[i],ent->d_name);
                i++;
            }

        }
        closedir(rep);
    }

    j=rand()%(i-0) +0;
    strcpy(nom_fichier,tab_fichier[j]);


}

void animer_description(char texte[],int pos_x,int pos_y,int couleur1,int couleur2)
{
	int i=0;
	char c;
    move_cursor(pos_x,pos_y);
    change_cursor(100, 1);
    color_console(couleur1,0);
    c=texte[0];
    while(c!='\0')
    {
        _sleep(40);
        printf("%c",c);
         i++;
        c=texte[i];
    }
    change_cursor(100, 0);
    move_cursor(pos_x,pos_y);
    color_console(couleur2, 0);
    i=0;
    c=texte[0];
    while(c!='\0')
    {
        _sleep(20);
        printf("%c",c);
        i++;
        c=texte[i];
    }
}

void sauvegarder(int niveau,grille tab[9][9])
{
    FILE *f;
    char chemin[50];
    char nom_sauvegarde[20];
    int i,j;
    move_cursor(15, 18);
    color_console(14, 0);
    printf("!Veuillez ne pas utliser un nom depassant les 20 caracteres!");
    move_cursor(15, 25);
    color_console(12, 0);
    printf("Veuillez saisir le nom du fichier de sauvegarde :");
    move_cursor(34, 26);
    color_console(15, 0);
    change_cursor(100, 1);
    scanf("%s",nom_sauvegarde);
    strcpy(chemin,"./sauvegarde/");
    strcat(nom_sauvegarde,".txt");
    strcat(chemin,nom_sauvegarde);
    f=fopen(chemin,"r");
    if(f!=NULL)
    {
        system("cls");
        move_cursor(15, 25);
        color_console(12, 0);
        char texto[]="ERREUR : Le nom de fichier de sauvegarde existe.";
        animer_description(texto,15,25,15,12);
    }
    if (f==NULL)
    {
        f=fopen(chemin,"w");
        fprintf(f,"%d\n",niveau);
        for(i=0;i<niveau;i++)
        {
            for(j=0;j<niveau;j++)
            {
                fprintf(f,"%d %d %d %d %d",tab[i][j].type,tab[i][j].val,tab[i][j].somme1,tab[i][j].somme2,tab[i][j].chiffre);
                fprintf(f,"\n");
            }
            fprintf(f,"\n");
            fprintf(f,"\n");
        }
        fclose(f);
        system("cls");
        char texto[]="SAUVEGARDE EFFECTUE AVEC SUCCES.";
        animer_description(texto,10,10,15,12);
    }
}

void animer_clique_terminer()
{
	int i=0;
    char texte[]="APPUYER SUR LE BOUTON ENTRER POUR RETOURNER AU MENU !!!";
    move_cursor(10,3);
    change_cursor(100, 1);
    color_console(8,0);
    for(i=0; i<55; i++)
    {
        _sleep(10);
        printf("%c", texte[i]);
    }
    change_cursor(100, 0);
    move_cursor(10, 3);
    color_console(12, 0);
    for(i=0; i<55; i++)
    {
        _sleep(10);
        printf("%c", texte[i]);
    }
}

void afficher_titre()
{
    FILE *f=NULL;
    char titre[62]="";
    int i=0;
    f=fopen("./fichiers_application/titre.txt", "r");
    if(f!=NULL)
    {
        color_console(12, 0);
        while(fgets(titre, 62, f))
        {
            move_cursor(8, 13+i);
            printf("%s", titre);
            i++;
        }
        fclose(f);
        color_console(12,0);
    }
}

void afficher_titre_kakuro()
{
    FILE *f=NULL;
    char titre[62]="";
    int i=0;
    f=fopen("./fichiers_application/titre_kakuro.txt", "r");
    if(f!=NULL)
    {
        color_console(12, 0);
        while(fgets(titre, 62, f))
        {
            move_cursor(12, 13+i);
            printf("%s", titre);
            i++;
        }
        fclose(f);
        color_console(12,0);
    }
}

void afficher_texte_fichier(char *fichier)
{
    FILE *f=NULL;
    char chaine[62]="";
    int i=0;
    f=fopen(fichier, "r");
    if(f!=NULL)
    {
        color_console(15, 0);
        while(fgets(chaine, 62, f))
        {
            move_cursor(8, 13+i);
            printf("%s",chaine);
            i++;
        }
        fclose(f);
        color_console(15,0);
    }
    else
    {
        printf("erreur de lecture du fichier");
    }
}

void afficher_liste_utilisateurs(char *fichier)
{
    FILE *f=NULL;
    int i=0;
    utilisateur t;
    f=fopen(fichier, "r");
    if(f!=NULL)
    {
        color_console(15, 0);
        move_cursor(5, 13+i);
        printf("--------Liste des joueurs inscrits dans ESPRIT-KAKURO-----------");
        while(!feof(f))
        {
            move_cursor(8, 15+i);
            fscanf(f,"%s %s %d %f %d",t.pseudo,t.mot_passe,&t.avatar,&t.score,&t.nb_acces);
            color_console(14, 0);
            printf("* PSEUDO : %s | SCORE : %f | NOMBRE D ACCES : %d ", t.pseudo,t.score,t.nb_acces);
            i++;
            color_console(15, 0);
            move_cursor(5, 15+i);
            printf("----------------------------------------------------------------");
            i++;
        }
        fclose(f);

    }
    else
    {
        move_cursor(19, 13);
        printf("erreur de lecture du fichier des utilisateurs.");
    }
}


void afficher_meilleurs_scores(char *fichier)
{
    FILE *f=NULL;
    int n=0,k=0;
    utilisateur t[300];
    f=fopen(fichier, "r");
    if(f!=NULL)
    {
        while(!feof(f))
        {
            fscanf(f,"%s %s %d %f %d ",t[n].pseudo,t[n].mot_passe,&t[n].avatar,&t[n].score,&t[n].nb_acces);
            n++;
        }
        fclose(f);
        int i, j, max;
        utilisateur tampon ;
        for (i=0;i<n-1;i++)
            {
                max=i ;
                for (j=i+1;j<n;j++) {if ((t[j].score)>(t[max].score)) max=j;}
                tampon=t[i];
                t[i]=t[max];
                t[max]=tampon;
            }
         move_cursor(5, 15+k);
         color_console(15, 0);
         k++;
        printf("--------------Meilleurs scores dans ESPRIT-KAKURO---------------");
        for (i=0;i<3;i++)
            {
            move_cursor(8, 15+k);
            color_console(14, 0);
            printf(" %d / SCORE : %f   JOUEUR : %s",i+1,t[i].score,t[i].pseudo);
            k++;
            color_console(15, 0);
            move_cursor(5, 15+k);
            printf("----------------------------------------------------------------");
            k++;
        }
    }
    else
    {
        move_cursor(19, 13);
        printf("erreur de lecture du fichier des utilisateurs.");
    }
}

void charger_grille(char nom_fichier[],grille tab[9][9], int niveau)
{
    FILE *f;
    struct element e;
    int x=0,y=0,taille_grille,n;
    taille_grille=taille(niveau);
    f=fopen(nom_fichier,"r");
    fscanf(f,"%d",&n);
    while((x!=taille_grille)&&(y!=taille_grille))
    {
        fscanf(f,"%d %d %d %d %d",&e.type,&e.val,&e.somme1,&e.somme2,&e.chiffre);
        tab[x][y]=e;
        if(y==(taille_grille-1))
        {
            x++;
            y=0;
        }
        else
        {
            y++;
        }

    }
    fclose(f);
}

void afficher_grille(grille tab[9][9],int x,int niveau)
{
    int i,j,k=0,taille_grille,espacement_x,espacement_y;
    taille_grille=taille(niveau);
    if (taille_grille==5)
    {
      espacement_x=22;
      espacement_y=9;
      }
    if (taille_grille==6)
    {
      espacement_x=15;
      espacement_y=4;
    }
    if(taille_grille==7)
    {
      espacement_x=10;
      espacement_y=5;
      }
      if(taille_grille==8)
    {
      espacement_x=5;
      espacement_y=6;
      }
    for(i=0;i<taille_grille;i++)
    {

        move_cursor(espacement_x,3+k+espacement_y);
        for (j=0;j<taille_grille;j++)
        {
             color_console(0,15);
             printf(" ------ ");
             printf(" ");
        }
        printf("\n");
        k++;
        move_cursor(espacement_x,3+k+espacement_y);
        for(j=0;j<taille_grille;j++)
        {
            if(tab[i][j].type==0)
            {
                color_console(0,15);
                if((x==0)&&(tab[i][j].chiffre==0))
                {
                        printf("|      |");
                }
                if((x==0)&&(tab[i][j].chiffre!=0))
                {
                        printf("|  %d   |",tab[i][j].chiffre);
                }
                if (x==1)
                {
                       printf("|  %d   |",tab[i][j].val);
                }
                printf(" ");
            }
            if(tab[i][j].type==1)
            {
                if(tab[i][j].somme1/10<1)
                {

                color_console(12,15);
                printf("|  %d   |",tab[i][j].somme1);
                printf(" ");

                }
                if(tab[i][j].somme1/10>=1)
                {

                color_console(12,15);
                printf("|  %d  |",tab[i][j].somme1);
                printf(" ");

                }
            }
            if(tab[i][j].type==2)
            {
                color_console(12,15);
                if ((tab[i][j].somme1/10<1)&&(tab[i][j].somme2/10<1))
                {
                    printf("| %d \\ %d|",tab[i][j].somme1,tab[i][j].somme2);
                }
                if ((tab[i][j].somme1/10>=1)&&(tab[i][j].somme2/10>=1))
                {
                    printf("|%d \\%d|",tab[i][j].somme1,tab[i][j].somme2);
                }
                if ((tab[i][j].somme1/10>=1)&&(tab[i][j].somme2/10<1))
                {
                    printf("|%d \\%d |",tab[i][j].somme1,tab[i][j].somme2);
                }
                if ((tab[i][j].somme1/10<1)&&(tab[i][j].somme2/10>=1))
                {
                    printf("| %d \\%d|",tab[i][j].somme1,tab[i][j].somme2);
                }
                printf(" ");
            }
            if(tab[i][j].type==3)
            {
                color_console(0,15);
                printf("|");
                color_console(0,0);
                printf("   -  ");
                color_console(0,15);
                printf("|");
                printf(" ");
            }

        }
        printf("\n");
        k++;
        move_cursor(espacement_x,3+k+espacement_y);
        for (j=0;j<taille_grille;j++)
        {
             if(tab[i][j].type==2)
             {
                 printf("|_____\\|");
                printf(" ");
             }
             else
             {
                printf("|______|");
                printf(" ");
             }

        }printf("\n");
        k++;
        move_cursor(espacement_x,3+k+espacement_y);
    }
}


int verifier(grille tab[9][9],int chiffre,int ligne,int colonne,int niveau)
{
    int i,taille_grille;
    taille_grille=taille(niveau);
    for(i=0;i<taille_grille;i++)
    {
        if(tab[ligne][i].type==0)
        {
              if(tab[ligne][i].chiffre==chiffre)
                return 1;
        }

    }
    for(i=0;i<taille_grille;i++)
    {
        if(tab[i][colonne].type==0)
        {
            if(tab[i][colonne].chiffre==chiffre)
            return 1;
        }

    }

    return 0;
}

int indice_debut_verif_ligne(grille tab[9][9],int niveau,int ligne,int colonne)
{
    int taille_grille,i;
    taille_grille=taille(niveau);
    for(i=colonne;i>0;i--)
    {
        if(tab[ligne][i].type!=0)
        return i;
    }
    return 0;
}
int indice_fin_verif_ligne(grille tab[9][9],int niveau,int ligne,int colonne)
{
    int taille_grille,i;
    taille_grille=taille(niveau);
    for(i=colonne;i<taille_grille;i++)
    {
        if(tab[ligne][i].type!=0)
        return i;
    }
    return taille_grille;
}

int verif_saisie_ligne(grille tab[9][9],int niveau,int ligne,int colonne,int val)
{
    int debut,fin,i;
    debut=indice_debut_verif_ligne(tab,niveau,ligne,colonne);
    fin=indice_fin_verif_ligne(tab,niveau,ligne,colonne);
    for(i=debut;i<fin;i++)
    {
        if(tab[ligne][i].chiffre==val)
        return 1;
    }
    return 0;
}


int indice_debut_verif_colonne(grille tab[9][9],int niveau,int ligne,int colonne)
{
    int taille_grille,i;
    taille_grille=taille(niveau);
    for(i=ligne;i>0;i--)
    {
        if(tab[i][colonne].type!=0)
        return i;
    }
    return 0;
}
int indice_fin_verif_colonne(grille tab[9][9],int niveau,int ligne,int colonne)
{
    int taille_grille,i;
    taille_grille=taille(niveau);
    for(i=ligne;i<taille_grille;i++)
    {
        if(tab[colonne][i].type!=0)
        return i;
    }
    return taille_grille;
}

int verif_saisie_colonne(grille tab[9][9],int niveau,int ligne,int colonne,int val)
{
    int debut,fin,i;
    debut=indice_debut_verif_colonne(tab,niveau,ligne,colonne);
    fin=indice_fin_verif_colonne(tab,niveau,ligne,colonne);
    for(i=debut+1;i<fin;i++)
    {
        if(tab[i][colonne].chiffre==val)
        return 1;
    }
    return 0;
}

void remplir_atutomatic(grille tab[9][9],int niveau)
 {
   int x,y,taille_grille,pos_y=33;
   taille_grille=taille(niveau);
   move_cursor(0, pos_y);
   color_console(15,0);
   printf("Veuillez saisir la case : ");
    pos_y+=2;
   move_cursor(0, pos_y);
   color_console(15,0);
   printf("Ligne : ");
   scanf("%d",&x);
   x=x-1;
   while((x==0)||(x>=taille_grille)||(x<1))
   {
        pos_y+=2;
        char texto[100]="ERREUR (Ligne invalide): Tapez une autre ligne : ";
        animer_description(texto,0,pos_y,15,12);
        pos_y+=2;
        move_cursor(0,pos_y);
        color_console(15,0);
        printf("Ligne : ");
        scanf("%d",&x);
        x=x-1;
   }
   pos_y+=2;
   move_cursor(0, pos_y);
   printf("Colonne : ");
   scanf("%d",&y);
   y=y-1;
   while((y==0)||(y>=taille_grille)||(y<1))
    {
            pos_y+=2;
            char texto[100]="ERREUR  (Colonne invalide): Tapez une autre colonne : ";
            animer_description(texto,0,pos_y,15,12);
            pos_y+=2;
            move_cursor(0,pos_y);
            color_console(15,0);
            printf("Colonne : ");
            scanf("%d",&y);
            y=y-1;
   }

   if((tab[x][y].type==1)||(tab[x][y].type==2)||(tab[x][y].type==3))
   {
       pos_y+=2;
       char texto[100]="ERREUR : veuillez saisir une case qui est modifiable";
       animer_description(texto,0,pos_y,15,12);
   }
   else
   {

        pos_y+=2;
        tab[x][y].chiffre=tab[x][y].val;
        char texto[100]="Remplissage automatique effectue.";
        animer_description(texto,0,pos_y,15,12);
   }
   system("cls");
    color_console(0,0);
}

void jouer(grille tab[9][9],int niveau)
 {
   int x,y,z,taille_grille,pos_y=33,verif_l,verif_c;
   taille_grille=taille(niveau);
   move_cursor(0, pos_y);
   color_console(15,0);
   printf("Ligne : ");
   scanf("%d",&x);
   x=x-1;
   while((x==0)||(x>=taille_grille)||(x<1))
   {
        pos_y+=2;
        char texto[100]="ERREUR (Ligne invalide): Tapez une autre ligne : ";
        animer_description(texto,0,pos_y,15,12);
        pos_y+=2;
        move_cursor(0,pos_y);
        color_console(15,0);
        printf("Ligne : ");
        scanf("%d",&x);
        x=x-1;
   }
   pos_y+=2;
   move_cursor(0, pos_y);
   printf("Colonne : ");
   scanf("%d",&y);
   y=y-1;
   while((y==0)||(y>=taille_grille)||(y<1))
    {
            pos_y+=2;
            char texto[100]="ERREUR  (Colonne invalide): Tapez une autre colonne : ";
            animer_description(texto,0,pos_y,15,12);
            pos_y+=2;
            move_cursor(0,pos_y);
            color_console(15,0);
            printf("Colonne : ");
            scanf("%d",&y);
            y=y-1;
   }

   if((tab[x][y].type==1)||(tab[x][y].type==2)||(tab[x][y].type==3))
   {
       pos_y+=2;
       char texto[100]="ERREUR : Vous ne pouvez pas modifier cette case.";
       animer_description(texto,0,pos_y,15,12);
   }
   else
   {
    do
    {
    pos_y+=2;
       move_cursor(0, pos_y);
       color_console(15,0);
    printf("tapez une valeur entre 1 ET 9 : ");
    scanf("%d",&z);
    }
    while ((z<1)||(z>9));
    verif_l=verif_saisie_ligne(tab,niveau,x,y,z);
    verif_c=verif_saisie_colonne(tab,niveau,x,y,z);
    if(verif_l==1)
    {
        pos_y+=2;
        char texto[100]="ERREUR : Impossible de saisir le meme nombre 2 fois dans le meme bloc horizontal";
        animer_description(texto,0,pos_y,15,12);
    }
    if(verif_c==1)
    {
        pos_y+=2;
        char texto[100]="ERREUR : Impossible de saisir le meme nombre 2 fois dans le meme bloc vertical";
        animer_description(texto,0,pos_y,15,12);
    }
    if((verif_l==0)&&(verif_c==0))
    {
        pos_y+=2;
        tab[x][y].chiffre=z;
        char texto[100]="Modification effectuee.";
        animer_description(texto,0,pos_y,15,12);

   }

}
    system("cls");
    color_console(0,0);
 }

int verification_frontiere_ligne_saisie(grille tab[9][9],int niveau,int ligne,int indice_debut,int indice_fin)
{
    int taille_grille,test=0;
   taille_grille=taille(niveau);
    int j;
    for(j=indice_debut+1;j<indice_fin;j++)
    {
        if(tab[ligne][j].chiffre!=0)
        {
            test++;
        }
    }
    return test;
}

int verification_ligne_saisie(grille tab[9][9],int niveau,int ligne)
{
    int taille_grille,test=0,j;
    taille_grille=taille(niveau);
    for(j=0;j<taille_grille;j++)
    {
        if(tab[ligne][j].chiffre!=0)
        {
            test++;
        }
    }
    return test;
}

int verification_cases_saisies_lignes(grille tab[9][9],int niveau)
{
    int taille_grille,pos_y=38;
    int i,k,somme,indice_debut,indice_fin,colonne,test,ligne,verification_saisie=0,somme_origine=0,nb_verif=0,nb_affichage=0;
    color_console(15,0);
    taille_grille=taille(niveau);
    for(ligne=0;ligne<taille_grille;ligne++)
    {

                 verification_saisie=verification_ligne_saisie(tab,niveau,ligne);
                    if (verification_saisie!=0)
                        {
                            k=0;
                            test=0;
                            indice_debut=0;
                            indice_fin=0;
                            for(colonne=0;colonne<taille_grille;colonne++)
                            {
                                indice_fin=0;
                                if(tab[ligne][colonne].type!=0)
                                {
                                    if(tab[ligne][colonne+1].type==0)
                                    {
                                        indice_debut=colonne;
                                        k=colonne+1;
                                        while ((k<taille_grille)&&(indice_fin==0))
                                            {
                                            if(tab[ligne][k].type!=0)
                                                {
                                                    indice_fin=k;
                                                }
                                            else
                                                {
                                                    k++;
                                                }
                                            };
                                        if(indice_fin==0){indice_fin=k;}
                                    }
                                    if(indice_fin!=0)
                                    {
                                        verification_saisie=verification_frontiere_ligne_saisie(tab,niveau,ligne,indice_debut,indice_fin);
                                        if (verification_saisie!=0)
                                        {
                                                somme=0;
                                        for (i=indice_debut+1;i<indice_fin;i++)
                                        {
                                            somme=somme+tab[ligne][i].chiffre;
                                        }
                                        if(tab[ligne][indice_debut].type==1)
                                        {
                                            somme_origine=tab[ligne][indice_debut].somme1;
                                        }
                                        if(tab[ligne][indice_debut].type==2)
                                        {
                                            somme_origine=tab[ligne][indice_debut].somme2;
                                        }
                                        nb_verif++;
                                        if(somme_origine!=somme)
                                        {

                                         nb_affichage++;
                                         move_cursor(0,pos_y);
                                         printf("---------------------------------------------------------------\n");
                                        printf("LIGNE : %d ,  zone comprise entre la case  num %d a la case %d\n",ligne+1,indice_debut,indice_fin);
                                         printf("La somme saisie = %d et la somme demandee = %d\n",somme,somme_origine);
                                         color_console(12,0);
                                         printf("               Veuillez revoir cette zone.\n");
                                         color_console(15,0);
                                        printf("---------------------------------------------------------------\n");
                                        pos_y+=7;
                                        }
                                        }

                                    }
                                }
                        }
                    }

    }
                    if(nb_verif==0)
                    {
                          color_console(14,0);
                        move_cursor(0,pos_y);
                        printf("Aucune donnee n est saisie.");
                                                pos_y+=3;
                    }
                    if((nb_verif!=0)&&(nb_affichage==0))
                    {
                        color_console(14,0);
                        move_cursor(0,pos_y);
                        printf("Les cases saisies sont correctes et respectent le(s) somme(s) demandee(s).");
                        pos_y+=4;
                    }
    return pos_y;
}

int verification_frontiere_colonne_saisie(grille tab[9][9],int niveau,int colonne,int indice_debut,int indice_fin)
{
    int taille_grille,test=0,j;
    taille_grille=taille(niveau);
    for(j=indice_debut+1;j<indice_fin;j++)
    {
        if(tab[j][colonne].chiffre!=0)
        {
            test++;
        }
    }
    return test;
}

int verification_colonne_saisie(grille tab[9][9],int niveau,int colonne)
{
    int taille_grille,test=0,j;
    taille_grille=taille(niveau);
    for(j=0;j<taille_grille;j++)
    {
        if(tab[j][colonne].chiffre!=0)
        {
            test++;
        }
    }
    return test;
}

int verification_cases_saisies_colonnes(grille tab[9][9],int niveau,int pos_y)
{
    int taille_grille;
    int i,k,somme,indice_debut,indice_fin,colonne,test,ligne,verification_saisie=0,somme_origine=0,nb_verif=0,nb_affichage=0;
    color_console(15,0);
    taille_grille=taille(niveau);
    for(colonne=0;colonne<taille_grille;colonne++)
    {

                 verification_saisie=verification_colonne_saisie(tab,niveau,colonne);
                    if (verification_saisie!=0)
                        {
                            k=0;
                            test=0;
                            indice_debut=0;
                            indice_fin=0;
                            for(ligne=0;ligne<taille_grille;ligne++)
                            {
                                indice_fin=0;
                                if(tab[ligne][colonne].type!=0)
                                {
                                    if(tab[ligne+1][colonne].type==0)
                                    {
                                        indice_debut=ligne;
                                        k=ligne+1;
                                        while ((k<taille_grille)&&(indice_fin==0))
                                            {
                                            if(tab[k][colonne].type!=0)
                                                {
                                                    indice_fin=k;
                                                }
                                            else
                                                {
                                                    k++;
                                                }
                                            };
                                        if(indice_fin==0){indice_fin=k;}
                                    }
                                    if(indice_fin!=0)
                                    {
                                        verification_saisie=verification_frontiere_colonne_saisie(tab,niveau,colonne,indice_debut,indice_fin);
                                        if (verification_saisie!=0)
                                        {
                                                somme=0;
                                        for (i=indice_debut+1;i<indice_fin;i++)
                                        {
                                            somme=somme+tab[i][colonne].chiffre;
                                        }
                                            somme_origine=tab[indice_debut][colonne].somme1;
                                        nb_verif++;
                                        if(somme_origine!=somme)
                                        {

                                         nb_affichage++;
                                         move_cursor(0,pos_y);
                                         printf("---------------------------------------------------------------\n");
                                        printf("COLONNE : %d , zone comprise entre la case  num %d a la case %d\n",colonne+1,indice_debut,indice_fin);
                                         printf("La somme saisie = %d et la somme demandee = %d\n",somme,somme_origine);
                                         color_console(12,0);
                                         printf("               Veuillez revoir cette zone.\n");
                                         color_console(15,0);
                                        printf("---------------------------------------------------------------\n");
                                        pos_y+=7;
                                        }
                                        }

                                    }
                                }
                        }
                    }

    }
                    if((nb_verif!=0)&&(nb_affichage==0))
                    {
                        color_console(14,0);
                        move_cursor(0,pos_y);
                        printf("Les cases saisies sont correctes et respectent le(s) somme(s) demandee(s).");
                        pos_y+=3;
                        return 0;
                    }
                return 1;
}

int corriger(grille tab[9][9],int niveau)
{
    int pos_y,n;
    char texto[]="VERIFICATION DES LIGNES EN COURS...";
                    animer_description(texto,10,33,15,12);
                    pos_y=verification_cases_saisies_lignes(tab,niveau);
                    if(pos_y==42)
                    {
                        char texto[]="VERIFICATION DES COLONNES EN COURS...";
                        animer_description(texto,10,pos_y,15,12);
                        pos_y+=2;
                        n=verification_cases_saisies_colonnes(tab,niveau,pos_y);
                        if(n==0)
                        return 0;
                        else
                        return 1;
                    }
                    else
                    {
                        return 1;
                    }
     return 1;

}

int recuperer_niveau(char nom_fichier[])
{
    FILE *f;
    int niveau;
    f=fopen(nom_fichier,"r");
    fscanf(f,"%d",&niveau);
    fclose(f);
    return niveau;
}
